<?php

class PassagemModel extends Model {
    
    const P_KEY = 'ID';
    const T_NAME = 'Passagem';
    
    public static function GetByID($ID){
        $Passagem = null;
        $Result = parent::getByKey(self::T_NAME, self::P_KEY, $ID);
        if(!empty($Result)){
            $Passagem = self::CreatePassagem($Result);
        }
        return $Passagem;
    }
    
    public static function GetByCliente($CPF, $IDViagem = 0){
        $db = DB::getInstance();
        $StQuery = "SELECT p.* FROM \"Passagem\" p JOIN \"Viagem\" v ON p.\"IDViagem\" = v.\"ID\" WHERE \"CPFCliente\" = '{$CPF}'";
        if(!empty($IDViagem))
            $StQuery .= ' AND "IDViagem" = ' . $IDViagem;
        
        $StQuery .= ' ORDER BY p."DataCompra" DESC, v."HorarioPartida", "NumeroPoltrona", "IDViagem"';
        
        $db->execute($StQuery);
        return self::GetPassagensFromResult($db->fetchAll());
    }
    
    public static function GetByViagem($IDViagem){
        $db = DB::getInstance();
        $StQuery = "SELECT * FROM \"Passagem\" WHERE \"IDViagem\" = {$IDViagem}";
        
        $db->execute($StQuery);
        return self::GetPassagensFromResult($db->fetchAll());
    }
    
    private static function CreatePassagem($Result){
        $Passagem = new Passagem($Result['ID']);
        $Passagem->setNumeroPoltrona($Result['NumeroPoltrona']);
        $Passagem->setCliente(ClienteModel::GetByCPF($Result['CPFCliente']));
        $Passagem->setViagem(ViagemModel::GetByID($Result['IDViagem']));
        return $Passagem;
    }
    
    private static function GetPassagensFromResult($ArResult){
        $ArPassagens = array();
        foreach($ArResult as $Result){
            $ArPassagens[] = self::CreatePassagem($Result);
        }
        return $ArPassagens;
    }
    
    public static function RegistrarCompraPassagens($Cliente, $Viagem, $Poltronas){
        $db = DB::getInstance();
        $StQuery = 'INSERT INTO "Passagem"("NumeroPoltrona", "CPFCliente", "IDViagem") VALUES ';
        foreach($Poltronas as $Poltrona){
            $StQuery .= "($Poltrona, '{$Cliente->getCPF()}', {$Viagem->getID()}),";
        }
        $StQuery = substr($StQuery, 0, strlen($StQuery) - 1);
        $db->execute($StQuery);
        return $db->affectedRows() > 0;
    }
    
}

?>
